#  网站统计大数据
#  2017-12-27 20:00启动
#  参与人：壮志凌云

from __future__ import print_function
from pyspark.sql import SparkSession
from pyspark.sql.functions import sum,row_number,desc,count,countDistinct,from_unixtime
from pyspark.sql import Window
import json

if __name__ == "__main__":
    spark = SparkSession \
        .builder \
        .appName("网站统计-网站概况") \
        .getOrCreate()

#  采用python库函数，自行解析json，数据读取正常
    jsonData = spark.sparkContext.textFile("main_pv.json")
    WebData = jsonData.map(json.loads).toDF()
    WebData.printSchema()

#  PV UV IP日汇总 #1 今日流量
    OverViewDay = WebData.groupBy(from_unixtime("vt", format='yyyy-MM-dd').alias("日期")).agg(
        count("_id").alias("浏览量(PV)"),
        countDistinct("u").alias("访客数(UV)"),
        countDistinct("ip").alias("IP数")
    )

    #  PV UV IP小时汇总 #2 趋势图
    OverViewHour = WebData.groupBy(from_unixtime("vt", format='yyyy-MM-dd').alias("日期"),
                                   from_unixtime("vt", format='HH').alias("小时")).agg(
        count("_id").alias("浏览量(PV)"),
        countDistinct("u").alias("访客数(UV)"),
        countDistinct("ip").alias("IP数")
    )

    #  搜索词汇总 #3 Top10搜索词 无数据

    #  所有数据来源网站汇总 #4 Top10来源网站
    OverViewLinkSource = WebData.groupBy(WebData["ref"].alias("来源网站")).agg(
        count("_id").alias("浏览量(PV)")
    ).orderBy(desc("浏览量(PV)"))

    #  所有数据来源网站汇总 #5 Top10入口页面 无数据

    #  所有数据来源网站汇总 #6 Top10受访界面
    OverViewVisitPage = WebData.groupBy(WebData["url"].alias("受访界面")).agg(
        count("_id").alias("浏览量(PV)")
    ).orderBy(desc("浏览量(PV)"))

    #  所有数据来源网站汇总 #7 新老访客 无数据
    #  所有数据来源网站汇总 #8 年龄分布 无数据
    #  所有数据来源网站汇总 #9 地域分布 无数据


    OverViewDay.show()
    OverViewHour.show()
    OverViewLinkSource.show()
    OverViewVisitPage.show()

    spark.stop()
